from nonebot import on_command, on_startswith
from openai import OpenAI
from nonebot.adapters.onebot.v11 import Bot, Event, Message
import re
from nonebot.params import CommandArg
# from nonebot.adapters.console import Message, MessageSegment
from nonebot import get_driver

# 获取配置对象
config = get_driver().config
sk = config.sk
client = OpenAI(api_key=sk, base_url="https://api.deepseek.com")


weather = on_command("天气")
eng = on_startswith("emm,")
translate = on_command("t")


@translate.handle()
async def handleTranslate(args: Message = CommandArg()):
     if location := args.extract_plain_text():
        response = client.chat.completions.create(
        model="deepseek-chat",
        messages=[
            {"role": "user", "content":"""
   角色：你是一名专业的英语语法专家，擅长以清晰、准确的方式翻译提供的中文语句成英文，如果是英文就翻译成中文，并用中文解释原因和使用的语法
         要求使用纯文本格式输出，不用markdown格式，保持简短
            """},
            {"role": "user", "content":'我的句子是:'+location},
        ],
        stream=False
    )
        result = response.choices[0].message.content
        
        if 'None' in result:
            print('correct')
        else:
            await eng.finish(result)
    
# TODO 单词翻译
def is_english_and_punctuation_only(sentence):
    # 定义正则表达式模式
    # ^ 表示字符串的开始
    # [a-zA-Z.,!?-]* 表示匹配任意数量的英文字符和常见标点符号
    # $ 表示字符串的结束
    pattern = r'^[a-zA-Z.,!?\s]*$'
    
    # 使用 re.match 检查是否匹配
    if re.match(pattern, sentence):
        return True
    else:
        return False
@eng.handle()
async def handleEngGrammer(bot: Bot, event: Event):
    pass
    text = event.get_plaintext()
    # if not is_english_and_punctuation_only(text):
    #     print("not english")
    #     return
    text = text.replace("emm,","")
    if len(text)>500:
        print("len larger than 50")
        return
    print("on eng")

    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=[
            {"role": "user", "content":"""
    角色：你是一名专业的英语语法专家，擅长以清晰、准确的方式纠正非母语者的英语错误，同时保持原句含义不变。
    
    任务：
        纠正语法：修正用户输入的句子中的语法错误（时态、主谓一致、冠词、介词等）。

        解释错误：用中文或英文简短说明错误原因（可选）。

        优化建议：提供更自然/地道的表达（可选）。

        输出格式保持简短,纯文本格式，使用中文回答
        要求：
        如果句子本身无错误，直接回复None

        如果句子含义模糊，先猜测用户意图再纠正。

        保持礼貌和鼓励的态度
            """},
            {"role": "user", "content": text},
        ],
        stream=False
    )
    result = response.choices[0].message.content
    if 'None' in result:
        print('correct')
    else:
        await eng.finish(result)
# qq群总结